// app.js

// 兼容性处理：解决 @babel/runtime 问题
try {
  // 创建一个简单的 defineProperty polyfill
  if (typeof global !== 'undefined') {
    global.defineProperty = function(obj, key, value) {
      if (key in obj) {
        Object.defineProperty(obj, key, {
          value: value,
          enumerable: true,
          configurable: true,
          writable: true
        });
      } else {
        obj[key] = value;
      }
      return obj;
    };
  }
} catch (e) {
  console.warn('兼容性处理失败:', e);
}

App({
  onLaunch: function() {
    // 初始化云开发
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      const envId = 'cloud1-8gge1454b08b1f51' // 替换为你的云开发环境 ID

      // 检查环境ID是否已配置
      if (envId === 'your-env-id') {
        console.warn('⚠️ 请先配置云开发环境ID！')
        console.warn('📝 请在 app.js 中将 your-env-id 替换为你的实际环境ID')
        console.warn('🔗 获取环境ID：https://console.cloud.tencent.com/tcb')
        this.globalData.cloudEnvReady = false
      } else {
        wx.cloud.init({
          env: envId,
          traceUser: true,
        });
        this.globalData.cloudEnvReady = true
        console.log('✅ 云开发环境初始化成功')

        // 延迟记录应用启动的登录日志，确保云开发完全初始化
        setTimeout(() => {
          console.log('⏰ 开始延迟执行登录日志记录')
          this.recordLoginLog()
        }, 2000) // 增加延迟时间到2秒
      }
    }

    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称
          wx.getUserInfo({
            success: res => {
              this.globalData.userInfo = res.userInfo;
              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res);
              }
            }
          });
        }
      }
    });

    // 初始化更新管理器
    this.initUpdateManager();
  },

  onShow() {
    console.log('📱 小程序显示 - 检查是否需要记录登录')

    // 检查是否是新的会话（距离上次记录超过30分钟）
    const now = Date.now()
    const lastRecordTime = this.globalData.lastLoginRecordTime || 0
    const timeDiff = now - lastRecordTime
    const thirtyMinutes = 30 * 60 * 1000

    if (timeDiff > thirtyMinutes) {
      console.log('🔄 距离上次记录超过30分钟，重新记录登录')
      setTimeout(() => {
        this.recordLoginLog('show')
      }, 1000)
    } else {
      console.log('⏭️ 距离上次记录不足30分钟，跳过记录')
    }
  },

  // 记录登录日志
  async recordLoginLog(source = 'launch') {
    if (!this.globalData.cloudEnvReady) {
      console.warn('⚠️ 云开发环境未就绪，跳过登录日志记录')
      return
    }

    try {
      console.log(`📝 开始记录登录日志 - 触发来源: ${source}`)

      // 获取系统信息
      const systemInfo = wx.getSystemInfoSync()
      console.log('📱 系统信息:', systemInfo)

      // 准备登录日志数据
      const loginData = {
        loginType: source === 'launch' ? 'wechat_launch' : 'wechat_show',
        deviceInfo: {
          platform: systemInfo.platform || 'unknown',
          system: systemInfo.system || 'unknown',
          version: systemInfo.version || 'unknown',
          model: systemInfo.model || 'unknown',
          brand: systemInfo.brand || 'unknown',
          screenWidth: systemInfo.screenWidth || 0,
          screenHeight: systemInfo.screenHeight || 0,
          pixelRatio: systemInfo.pixelRatio || 1
        },
        locationInfo: {
          province: '',
          city: '',
          country: '中国'
        },
        userInfo: {
          nickName: '',
          avatarUrl: '',
          gender: 0,
          language: systemInfo.language || 'zh_CN'
        },
        source: source // 添加触发来源
      }

      console.log('📋 登录数据:', loginData)

      // 调用云函数记录登录日志
      const result = await wx.cloud.callFunction({
        name: 'recordLoginLog',
        data: loginData
      })

      console.log('📝 云函数调用结果:', result)

      if (result.result && result.result.success) {
        console.log('✅ 登录日志记录成功:', result.result.data.sessionId)
        this.globalData.sessionId = result.result.data.sessionId
        this.globalData.lastLoginRecordTime = Date.now() // 记录成功时间

        // 登录成功，仅记录日志，不显示提示
      } else {
        console.warn('⚠️ 登录日志记录失败:', result.result?.error)
        console.warn('⚠️ 完整错误信息:', result.result)

        // 登录失败，仅记录日志，不显示提示
      }

    } catch (error) {
      console.error('❌ 记录登录日志异常:', error)
      console.error('❌ 错误详情:', error.message)
      console.error('❌ 错误堆栈:', error.stack)
    }
  },

  // 初始化更新管理器
  initUpdateManager() {
    console.log('🔄 初始化小程序更新管理器')
    
    try {
      // 检查是否支持更新管理器
      if (!wx.getUpdateManager) {
        console.log('⚠️ 当前微信版本不支持更新管理器API')
        return
      }

      const updateManager = wx.getUpdateManager()
      
      if (!updateManager) {
        console.log('⚠️ 无法获取更新管理器实例')
        return
      }

      // 保存到全局，供其他地方使用
      this.globalData.updateManager = updateManager

      // 检查更新
      updateManager.onCheckForUpdate((res) => {
        console.log('📱 全局检查更新结果:', res.hasUpdate)
        this.globalData.hasUpdate = res.hasUpdate
        
        if (res.hasUpdate) {
          console.log('🎉 发现新版本，开始下载')
          this.globalData.updateStatus = 'downloading'
        } else {
          console.log('✅ 当前已是最新版本')
          this.globalData.updateStatus = 'latest'
        }
      })

      // 新版本下载完成
      updateManager.onUpdateReady(() => {
        console.log('📦 新版本下载完成')
        this.globalData.updateReady = true
        this.globalData.updateStatus = 'ready'
        
        // 提示用户更新
        wx.showModal({
          title: '更新提示',
          content: '新版本已经下载完成，是否立即重启应用？',
          confirmText: '立即更新',
          cancelText: '稍后更新',
          success: (res) => {
            if (res.confirm) {
              console.log('🔄 用户选择立即更新应用')
              try {
                updateManager.applyUpdate()
              } catch (applyError) {
                console.error('❌ 应用更新失败:', applyError)
                wx.showToast({
                  title: '更新失败，请重启应用',
                  icon: 'none',
                  duration: 2000
                })
              }
            } else {
              console.log('⏰ 用户选择稍后更新')
              // 设置标记，下次启动时提示
              wx.setStorageSync('pendingUpdate', true)
            }
          }
        })
      })

      // 新版本下载失败
      updateManager.onUpdateFailed(() => {
        console.error('❌ 新版本下载失败')
        this.globalData.updateFailed = true
        this.globalData.updateStatus = 'failed'
      })

      // 主动检查更新（延迟执行，确保应用完全启动）
      setTimeout(() => {
        try {
          // 重新验证更新管理器是否可用
          if (updateManager && typeof updateManager.checkForUpdate === 'function') {
            console.log('🔍 开始全局检查更新')
            updateManager.checkForUpdate()
          } else {
            console.log('⚠️ 更新管理器已失效，跳过检查')
            this.globalData.updateStatus = 'unavailable'
          }
        } catch (checkError) {
          console.error('❌ 全局检查更新失败:', checkError)
          this.globalData.updateFailed = true
          this.globalData.updateStatus = 'failed'
        }
      }, 3000)

    } catch (error) {
      console.error('❌ 初始化更新管理器失败:', error)
      this.globalData.updateStatus = 'error'
    }
  },

  globalData: {
    cloudEnvReady: false,
    sessionId: null,
    lastLoginRecordTime: 0, // 上次记录登录的时间
    hasUpdate: false, // 是否有可用更新
    updateReady: false, // 更新是否已准备好
    updateFailed: false, // 更新是否失败
    updateManager: null, // 更新管理器实例
    updateStatus: 'none', // 更新状态：none, checking, downloading, ready, failed, error, unavailable, latest
    targetTab: null // 目标标签页（用于跨页面传递标签参数）
  }
});